//
//  UIStackView+ZKChain.h
//  ChainFun
//
//  Created by 洪绵卫 on 2022/1/11.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

/*
   所有函数均只有getter函数，类似 zk_frame 对应的 frame属性 其余一样，去除zk_ 后边的为对应的属性名
 */
@interface UIStackView (ZKChain)
/* 因为父类的Category中返回的是UIView类型，不便于链式继续调用，所以这里写同名的get方法，返回值不同 */

/// 初始化 没有设置Frame
+ (UIStackView * _Nonnull (^)(void))zk_allocInit;

/// 带Frame的初始化
+ (UIStackView * _Nonnull (^)(CGRect))zk_allocInitWithFrame;

/// 设置View的Frame
- (UIStackView * _Nonnull (^)(CGRect))zk_frame;

/// 设置View的背景色
- (UIStackView * _Nonnull (^)(UIColor * _Nonnull))zk_backgroundColor;

/// 将View添加到父视图上
- (UIStackView * _Nonnull (^)(UIView * _Nonnull))zk_addToSuperView;

/// 设置View是否允许交互
- (UIStackView * _Nonnull (^)(BOOL))zk_userInteractionEnabled;

/// 设置View的Tag
- (UIStackView * _Nonnull (^)(NSInteger))zk_tag;

/// 设置View的Bounds
- (UIStackView * _Nonnull (^)(CGRect))zk_bounds;

/// 设置View的中心点
- (UIStackView * _Nonnull (^)(CGPoint))zk_center;

/// 设置View的透明度
- (UIStackView * _Nonnull (^)(CGFloat))zk_alpha;

/// 设置View的隐藏状态
- (UIStackView * _Nonnull (^)(BOOL))zk_hidden;

/// 设置View的TitColor
- (UIStackView * _Nonnull (^)(UIColor * _Nonnull))zk_tintColor;


#pragma mark 对应UIStackView 的一些属性

///  这个属性决定了所安排的视图的方向。
///  分配UILayoutConstraintAxisVertical值可以创建一列视图。
///  分配uilayoutconstraintaxishhorizontal值创建一行。
///  默认值为UILayoutConstraintAxisHorizontal
- (UIStackView * _Nonnull (^)(UILayoutConstraintAxis))zk_axis;

/// 这个属性决定了堆栈视图如何沿其轴线排列其已安排的视图。默认值是UIStackViewDistributionFill。关于可能值的列表，请参见UIStackViewDistribution。
- (UIStackView * _Nonnull (^)(UIStackViewDistribution))zk_distribution;

/// 这个属性决定了堆栈视图如何将其排列好的视图垂直于它的轴。
/// 默认值是UIStackViewAlignmentFill。
- (UIStackView * _Nonnull (^)(UIStackViewAlignment))zk_alignment;

/// 堆栈视图的已安排视图的相邻边之间的点距离。
- (UIStackView * _Nonnull (^)(CGFloat))zk_spacing;

/// 如果是YES，视图之间的垂直空间是从基于文本的视图的最后一条基线测量到它下面的视图的第一条基线。
/// 顶部和底部视图也被定位，以便它们最近的基线是到堆栈视图边缘的指定距离。
/// 此属性仅由垂直堆栈视图使用。使用对齐属性来基线水平堆栈视图中的对齐视图。
- (UIStackView * _Nonnull (^)(BOOL))zk_baselineRelativeArrangement;

/// 它决定堆栈视图是否根据其布局边距来布局其已安排的视图。
- (UIStackView * _Nonnull (^)(BOOL))zk_layoutMarginsRelativeArrangement;

#pragma mark 对应UIStackView 的一些方法

/// 初始化函数 subViews为其上边的子视图
- (UIStackView * _Nonnull (^)(NSArray<__kindof UIView *> *))zk_initWithArrangedSubviews;

/// 添加一个子视图至Arranged中
- (UIStackView * _Nonnull (^)(UIView * _Nonnull))zk_addArrangedSubview;

/// 从一个Arranged中移除一个子视图
- (UIStackView * _Nonnull (^)(UIView * _Nonnull))zk_removeArrangedSubview;

/// 插入一个子视图至Arranged中指定的位置
- (UIStackView * _Nonnull (^)(UIView * _Nonnull,NSUInteger))zk_insertArrangedSubviewToIndex;

@end

NS_ASSUME_NONNULL_END
